"""
首页页面静态化示例文件
步骤: 1. 查询数据
     2. 渲染模板
     3. 生成文件
"""

import os
import time

from django.conf import settings
from django.shortcuts import render
from django.template import loader

from MeiduoMall.utils.goods_category import get_goods_category
from contents.models import ContentCategory


def generate_static_index_html():
    """生成静态的主页html文件,减少每次访问均需要访问数据库查询数据的次数,
    但是页面中部分区域因用户不同而显示不同的数据,可以在用户请求完html后,通过ajax向后端发送请求获取属于用户的特殊数据,然后进行渲染
    注意配置保存生成的静态html文件的目录"""
    print('%s: generate_static_index_html' % time.ctime())

    # 查询分类数据
    categories = get_goods_category()

    # 查询广告数据
    contents = {}
    content_categories = ContentCategory.objects.all()
    for cat in content_categories:
        contents[cat.key] = cat.content_set.filter(status=True).order_by('sequence')

    # 渲染模板
    context = {
        'categories': categories,
        'contents': contents
    }
    """
    # 方式一:
    template = loader.get_template('index.html')
    html_text = template.render(context)
    print(html_text)
    """
    # 方式二:
    response = render(None, 'index.html', {'categories': categories, 'contents': contents})
    # 上步才是渲染模板,下行是取到渲染后的html字符串
    html_text = response.content.decode()  # content响应体
    # print(html_text)

    # 生成文件
    file_path = os.path.join(settings.GENERATED_STATIC_HTML_FILES_DIR, 'index.html')
    with open(file_path, 'w', encoding='utf-8') as f:
        f.write(html_text)
